<Query Kind="Program" />

#region
// ------------------------------------------------------
        // XPath详解 (http://www.cnblogs.com/hnsongbiao/p/5636076.html)
        //
        //    1)"/bookstore/book/price"
        //    
        //    XPath的开头是一个斜线（/）代表这是绝对路径，这可以选出所有路径符合这个模式的元素。这代表选出所有bookstore根节点下的book元素下的price元素。
        //    
        //    2)"//title"
        //    
        //    开头是两个斜线（//）表示文件中所有符合模式的元素都会被选出来，即使是处于树中不同的层级也会被选出来。这代表选出所有title元素。
        //    
        //    3)"/bookstore/book/author/*"
        //    
        //    使用星号（*）可以选择未知的元素。这代表选出bookstore根节点下的book节点下的anthor节点下的所有可能的节点。
        //    
        //    得到的结果：25 25 female
        //    
        //    4)"/bookstore/book/*/age"
        //    
        //    上面的语法会选出所有bookstore根节点下的book节点的隔一个层次的age节点。
        //    
        //    得到的结果为：25 25
        //    
        //    5)"/*/*/age"
        //    
        //    选取有两个层级的age元素，得到的结果为：100
        //    
        //    要注意的是，想要存取不分层级的元素，XPath语法必须以两个斜线开头(//)，想要存取未知元素才用星号(*)，星号只能代表未知名称的元素，不能代表未知层级的元素。
        //    
        //    6)"bookstore/book[1]/title"
        //    
        //     使用中括号可以选择分支。这代表选择bookstore根节点下第一个book节点的title节点。
        //    
        //    得到的结果为：C语言
        //    
        //    7)"bookstore/book[last()]/title"
        //    
        //     同样，这里表示选择最后一个节点，得到的结果是：数据结构
        //    
        //    8)"bookstore/book/author[sex]"
        //    
        //    这里表示选取所有带有sex元素并满足一定层次结构的author节点，得到的结果是：25female
        //    
        //    9)"/bookstore/book[price=66.5]/title"
        //    
        //     选取price元素值是66.5的book节点的title子节点，得到的结果是：数据结构
        //    
        //    10)"/bookstore/book/title | /bookstore/book/price"
        //    
        //     使用Or操作数(|)就可以选择一个以上的路径。这里表示选取符合一定层次结构的title元素与price元素
        //    
        //    其结果是：C语言 50 数据库 100 数据结构 66.5
        //    
        //     11)"//@name"
        //    
        //    在XPath中，除了选择元素以外，也可以选择属性，属性都是以@开头。这里表示选取所有的name属性。
        //    
        //    其结果是：XIAO Wang
        //    
        //     12)"//author[@name]/age"
        //    
        //    这里表示选取所有具有name属性的author节点的age节点。其结果是：25 25
        //    
        //    13)"//*[@*]"
        //    
        //    选取所有有属性的节点。其结果是：25 25female
        //    
        //    14)"//author[@name='Wang']/sex"
        //    
        //    选取所有属性name值为Wang的author节点的sex子节点。其结果是：female
#endregion
void Main()
{
			//string xmlFilePath = @"D:\Projects\DAPT\src\config\service\xxxxx12121\新建文件夹1\service111-affix.xml";
			//XmlDocument doc = new XmlDocument();
           // doc.Load(xmlFilePath);
           // XmlElement root = doc.DocumentElement;
			
			// SelectNodes(root);
			//SelectSingleNode(root);
			dealMybatisFile();
}

// Define other methods and classes here
private void SelectNodes(XmlElement root){
	// SelectNodes
  XmlNodeList listNodes = listNodes = root.SelectNodes("/service-config/service");
	foreach (XmlNode serviceNode in listNodes){
	 	var serviceId = serviceNode.Attributes["id"];
		Console.WriteLine(serviceId.InnerText);
		
		foreach (XmlNode actionNode in serviceNode.SelectNodes("action"))
      {
		Console.WriteLine("----");
			Console.WriteLine(actionNode.Attributes["name"]);
      }
	}

}

private void SelectSingleNode(XmlElement root){
	// 使用 属性 进行选择: @
	XmlElement specialServiceNode = (XmlElement)root.SelectSingleNode("/service-config/service[@id='queryCyqyfjTemp']");
	Console.WriteLine(specialServiceNode);
}

private void dealMybatisFile(){
			string xmlFilePath = @"D:\Projects\DAPT\src\config\mybatis\oracle\common.xml";
			XmlDocument doc = new XmlDocument();
            doc.Load(xmlFilePath);
            XmlElement root = doc.DocumentElement;
			 XmlNodeList serviceNodeList =root.SelectNodes("select|insert|update|delete");
			 Console.WriteLine(serviceNodeList);
}